package cn.com.dcsgo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.*;

/**
 * ThreadPoolConfig
 *
 * @author Dcsgo
 * @since 2025/5/7 上午9:34
 */
@Configuration
public class ThreadPoolConfig {
    @Bean
    public ThreadPoolExecutor threadPoolExecutor() {
        return new ThreadPoolExecutor(
                3,// 常驻线程数
                6,// 最大线程数
                3,// 线程空闲时间
                TimeUnit.SECONDS, // 空闲时间单位
                new ArrayBlockingQueue<>(3), // 阻塞队列
                Executors.defaultThreadFactory(), // 线程工厂
                new ThreadPoolExecutor.AbortPolicy() // 线程请求超过阻塞队列时的拒绝策略
        );
        // ThreadPoolExecutor自带的拒绝策略如下：
        //   1. AbortPolicy(默认)：直接抛出RejectedExecutionException异常阻止系统正常运行
        //   2. CallerRunsPolicy：“调用者运行”一种调节机制，该策略既不会抛弃任务，也不会抛出异常，而是将某些任务回退到调用者，从而降低新任务的流量。
        //   3. DiscardOldestPolicy：抛弃队列中等待最久的任务，然后把当前任务加人队列中 尝试再次提交当前任务。
        //   4. DiscardPolicy：该策略默默地丢弃无法处理的任务，不予任何处理也不抛出异常。 如果允许任务丢失，这是最好的一种策略。
    }
}